import { createI18n } from 'vue-i18n'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'

const locale = localStorage.getItem('LOCALE_LANGUAGE') || 'zh-cn'
const elLang = {
  'zh-cn': zhCn, // 中文
  'en': en // 英文
}

/**
 * 格式化文件名 ./en/file/name.json >>> ./en/file-name.json
 * @param {String} str 需要格式化的字符串
 */
const fileNameInfoFormat = (str) => {
  const index = 2
  const target = '/'
  const to = '-'
  return str.replace(new RegExp(`((?:${target}(?:\\s|\\S)*?){${index}})${target}`), `$1${to}`)
};

// 获取语言包目录
const keys = import.meta.globEager('./**.json') // require.context('./', true, /\.json/).keys();
const tempArray = []
for (const key in keys) {
  tempArray.push(key.split('/')[1])
}
const catalogue = Array.from(new Set(tempArray))

// 引入语言包
const messages = {};
const langFiles = import.meta.globEager('./**.json')
catalogue.forEach((key) => {
  // 目录中的语言包
  const langObj = {};
  for (const langKey in langFiles) {
    let name = fileNameInfoFormat(langKey)
        name = name.substring(0, name.indexOf('.json')).split('/')
        name = name[name.length - 1]
    if (langKey.startsWith(`./${key}/`)) {
      langObj[name] = langFiles[langKey].default || langFiles[langKey]
    }
  }
  messages[key] = {
    el: elLang[key],
    ...langObj
  }
})

const i18n = new createI18n({
  locale,
  fallbackLocale: 'en', // 默认语言
  messages: messages
})

export default i18n

/* Element 内置语言表
简体中文（zh-cn）
美国英语（en）
阿塞拜疆语（az）
德语（de）
葡萄牙语（pt）
西班牙语（es）
丹麦语（da）
法语（fr）
挪威语（nb-NO）
繁体中文（zh-tw）
意大利语（it）
韩语（ko）
日语（ja）
荷兰语（nl）
越南语（vi）
俄语（ru）
土耳其语（tr）
巴西葡萄牙语（pt-br）
波斯语（fa）
泰语（th）
印度尼西亚语（id）
保加利亚语（bg）
普什图语（pa）
波兰语（pl）
芬兰语（fi）
瑞典语（sv）
希腊语（el）
斯洛伐克语（sk）
加泰罗尼亚语（ca）
捷克语（cs）
乌克兰语（uk）
土库曼语（tk）
泰米尔语（ta）
拉脱维亚语（lv）
南非荷兰语（af）
爱沙尼亚语（et）
斯洛文尼亚语（sl）
阿拉伯语（ar）
希伯来语（he）
立陶宛语（lt）
蒙古语（mn）
哈萨克语（kk）
匈牙利语（hu）
罗马尼亚语（ro）
库尔德语（ku）
维吾尔语（ug-cn）
高棉语（km）
塞尔维亚语（sr）
巴斯克语（eu）
吉尔吉斯语（ky）
亚美尼亚语（hy-am）
克罗地亚语（hr）
世界语（eo）
孟加拉语（bn） */
